package com.huawei;

import java.util.*;

/**
 *
 * 注意：这道题我写错了
 * 注意：这道题我写错了
 * 注意：这道题我写错了
 * 注意：这道题我写错了
 * 注意：这道题我写错了
 * 注意：这道题我写错了
 * 注意：这道题我写错了
 * 只为留作纪念~~~~~~~~~~~~~~~~~
 *
 *
 * 查找两个字符串a,b中的最长公共子串。若有多个，输出在较短串中最先出现的那个。
 * 例子：
 * 输入：abcdefghijklmnop
 * abcsafjklmnopqrstuvw
 * 输出：jklmnop
 * <p>
 * 分析：
 * 1.一想到要顺序（相同返回最先），就想要到了
 * LinkedHashSet<String> 分析到第二步骤，发现，只需要用普通的set就可以了
 * LinkedHashMap<String.length(),String>  </>
 * 2.先遍历最长的字符串，把能拆分都整出来，放到set中
 * 3.然后遍历较短的字符串，把能拆分的整出来，放到set中，如果哦add失败，说明有重复的字符，放到LinkedHashMap中
 * 4.遍历完上面两个，那么找出map中最长的String.length(),然后map.get(String.length) 就可以得到答案
 */
public class HJ065ERROR {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String first = scanner.nextLine();
        String second = scanner.nextLine();

        HashSet<String> set = new HashSet<String>();
        LinkedHashSet<String> set2 = new LinkedHashSet<String>();
        LinkedHashMap<String, Integer> map = new LinkedHashMap<>();

        String longStr = "";
        String shortStr = "";
        //找出较长和较短的字符串
        if (first.length() > second.length()) {
            longStr = first;
            shortStr = second;
        } else {
            longStr = second;
            shortStr = first;
        }


        for (int i = 0; i < longStr.length(); i++) {
            for (int j = i + 1; j < longStr.length() + 1; j++) {
                String str = longStr.substring(i, j);
                set.add(str);
            }
        }



        for (int i = 0; i < shortStr.length(); i++) {
            for (int j = i + 1; j < shortStr.length() + 1; j++) {
                //如果插入不进去，那么说明是公共子串
                String str = shortStr.substring(i, j);
                // 傻逼了，shortStr有连续一样的子字符串就嗝屁了
                if (!set.add(str)) {
                    map.put(str, str.length());
                    //set2.add(str);
                }
            }
        }

        System.out.println(map);

        Optional<String> maxString = map.keySet().stream().max(((o1, o2) -> o1.length() - o2.length()));
        //Optional<String> maxString = set2.stream().max(((o1, o2) -> o1.length() - o2.length()));
        System.out.println(maxString.get());


    }
}
